const jWeixin = require('jweixin-module')
import {wxConfig, wxLogin} from '@/api/user'
import {TOKENNAME} from '@/config/app';
import {isWeChatBrowser} from '@/utils/platform.js'
import Cache from './cache'


// 微信初始化函数
export async function initWechat() {
  if (!isWeChatBrowser()) {
    console.log('非微信浏览器环境');
    return;
  }
  
  try {
    // 检查是否已登录或处于调试模式
    if (Cache.get(TOKENNAME) || location.href.indexOf('debug=1') > -1) {
      // 已登录或调试模式，直接初始化微信JS-SDK
      await wxInit();
    } else {
      // 未登录，尝试处理登录流程
      await handleWechatLogin();
    }
  } catch (error) {
    console.error('微信初始化失败:', error);
  }
}

// 微信重新函数
export async function againWechatLogin() {
  Cache.set(TOKENNAME,'')
  await handleWechatLogin(true);
}

// 处理微信登录
export async function handleWechatLogin(isAgain=false) {
  let query = new URLSearchParams(window.location.search);
  let code = query.get('code');
  await wxInit();
  if (code) {
    // 有code参数，尝试登录
    const res = await wxLogin({
      "loginType": "login-008",
      "thirdCode": code
    });
    
    if (res?.code - 0 === 0) {
      // 登录成功，保存token和用户信息
      Cache.set(TOKENNAME, res.data.token);
      Cache.set('userInfo', res.data);
      // 登录成功后初始化微信JS-SDK
    } else {
		const urlParams = new URLSearchParams(window.location.search);
      // 登录失败，跳转到登录页
      let url=window.location.pathname
      if(isAgain){
        if (urlParams.has('code')) {
          // 移除code参数
          urlParams.delete('code');
        }
      }
	  const newSearch = urlParams.toString() ? '?' + urlParams.toString() : '';
	  url = url + newSearch;
      uni.redirectTo({
        url: `/pages/login/index?redirect=${encodeURIComponent(url)}`
      });
    }
  } else {
    // 无code参数，跳转到登录页获取code
    uni.redirectTo({
      url: `/pages/login/index?redirect=${encodeURIComponent(window.location.pathname + window.location.search)}`
    });
  }
}

// 微信JS-SDK初始化
export async function wxInit() {
  try {
    const res = await wxConfig({url: window.location.href});
    Cache.set('appId', res.appId);
    if (Cache.get(TOKENNAME)) {
      jWeixin.config({
        appId: res.appId, // 必填，公众号的唯一标识
        timestamp: res.timestamp, // 必填，生成签名的时间戳
        nonceStr: res.nonceStr, // 必填，生成签名的随机串
        signature: res.signature, // 必填，签名
        jsApiList: [
          'onMenuShareAppMessage',
          'onMenuShareTimeline',
          'chooseWXPay',
          'showOptionMenu',
          "updateAppMessageShareData",
          "updateTimelineShareData",
          "hideMenuItems",
          "showMenuItems",
          "onMenuShareTimeline",
          'onMenuShareAppMessage'
        ] // 必填，需要使用的JS接口列表
      });
      
      jWeixin.ready(() => {
        console.log('微信JS-SDK初始化成功');
      });
      
      jWeixin.error((err) => {
        console.error('微信JS-SDK初始化失败', err);
      });
    }
  } catch (error) {
    console.error('微信JS-SDK配置错误', error);
  }
}

// 微信支付
export async function wxPay(pay, callback) {
  jWeixin.ready(() => {
    jWeixin.chooseWXPay({
      timestamp: pay.timeStamp, //时间戳，自1970年以来的秒数
      nonceStr: pay.nonceStr, //随机串
      package: pay.package,
      signType: pay.signType, //微信签名方式
      paySign: pay.paySign, //微信签名
      success: function (res) {
        // 支付成功后的回调函数
        callback?.(res);
      }
    });
  });
}
